草庐IT

C++ 指向 vector 的指针

全部标签

c++ - 构造函数参数,仅当实例为 const 时才接受指向 const 的指针

假设我有一个类:classA{B*b;public:A(B*pb):b(pb){}}并且我确保A的const方法永远不会修改b指向的对象。这样当A的实例是const时,持有Bconst*是安全的。Bconstb;Aa(&b);//compileerrorAconstca(&b);//compileerrortoo.HowcanIallowthisone 最佳答案 这不可能——构造函数甚至无法告诉对象是否(将要)const,更不用说用信息控制重载决议了。标准解决方法(通常用于迭代器)是制作A一个模板(即使它只有两个专业)并使用A来处理

c++ - const 指向成员的指针是否默认指向一个 int?

在玩指向成员的指针时,我遇到了一种似乎有点不一致并且对我来说有点违反直觉的行为。考虑以下虚拟结构:structfoo{intx;doubled;};和以下main():intmain(){intfoo::*ptr=&foo::x;doublefoo::*ptr2=&foo::d;}这里我们没有任何异常-两个指向const成员的指针。代码编译正常。引起我注意的是,当我们添加const时,情况发生了一点变化。考虑以下代码:intmain(){//nointordoubleafterconstconstfoo::*ptr=&foo::x;}代码在GCC8.2.01上编译良好。请注意,我没有指

C++:Vector3 类型 "wall"?

假设我有:classVector3{floatx,y,z;...bunchofcuntions..staticoperator+(constVector3&,constVector3);};现在,假设我想要上课:Position,Velocity,与Vector3完全一样(基本上,我想要typedefVector3Position;typedefVector3Velocity;除了,给出:Positionposition;Vector3vector3;Velocityvelocity;我想确保以下不能发生:position+vector3;vector3+velocity;veloci

c++ - "this"GDB 回溯中的指针变化

我正在检查核心转储,并注意到在一个帧中的“this”指针与下一帧(在同一线程中)不同。不仅仅是一点点不同,它从0x8167428变成了0x200。我不太精通GDB,但这对我来说似乎不对。这是有问题的吗?如果是,原因可能是什么? 最佳答案 如果在不同的对象上调用下一帧中的函数(即使对象是同一类型),则this指针可以在gdb跟踪中的帧之间改变,因为这是为了具体实例。这可能不是您的问题。0x200不是this的有效值,几乎可以肯定表示某种类型的内存损坏。this指针有时存储在堆栈中并作为不可见的第一个参数传递给函数。因此,如果您损坏了堆

c++ - 如何上下转换C++智能指针

两个客户端在消息层之上相互通信在消息正文中,我需要包含一个指向任何数据类型的字段我从客户端A发送字段为shared_ptr到消息层。我将此字段定义为shared_ptr在消息层。但是我怎样才能将这个字段转换回shared_ptr在客户B中?或者我应该定义shared_ptr在消息层中作为其他东西?谢谢 最佳答案 如果您使用的是boost::shared_ptr,那么您可以使用各种XXX_ptr_cast()函数(static_ptr_cast、dynamic_ptr_cast...)。如果您使用的是MSVC2010版本,我无法找到这

c++ - 如何将 C++ 引用传递给 C 函数的指针参数?

我只想在这里检查如何将引用传递给需要指针的函数。我在下面有一个代码示例。就我而言,我正在将C++引用传递给将更改我的值的C函数。我是否应该在此调用中使用运算符的“&”地址:retCode=MyCFunc(&myVar)?看来我是引用了引用,这在C++中是不允许的。但是,它编译得很好并且似乎可以工作。MainFunc(){intretCode=0;unsignedlongmyVar=0;retCode=MyCPlusPlusFunc(myVar);//usemyVarsnewvalueforsomechecks......}intMyCPlusPlusFunc(unsignedlong&

c++ - 自动实例化的智能指针

我正在寻找一种减少C++项目中header耦合的简单方法,这主要是由于(过度使用的)类组合,这当然需要完整的类型。例如://headerAclassA{Bb;//requiresheaderB};我也考虑过接口(interface)和pimpl,但是它们都暗示了一些我不想手动编写/支持的样板代码(或者有没有使之自动的方法?)。因此,我考虑过用一个指针和一个类似于classB*pB;的转发替换成员,但这需要处理对象的创建和删除。好的,我可以使用智能指针进行删除(虽然不是auto_ptr,因为它在创建时需要完整的类型,所以要说类似shared_ptrpB;这样的东西),但是现在如何进行对象

c++可能的空指针取消引用

我对一些代码运行了cppcheck以查找可能的运行时错误。并且它报告了以下情况下可能的空指针取消引用:Foo*x=...//definedsomewhere...Foo*y(x);//possiblenullpointerdereference.编辑:更好的例子for(inti=0;i来自cppcheck的错误消息:[C:\file.cpp:3]:(error)Possiblenullpointerdereference:x-otherwiseitisredundanttocheckifxisnullatline4但我不知道这怎么可能。 最佳答案

c++ - vector<vector<largeObject>> 与 c++ 中的 vector<vector<largeObject>*>

显然它会因您使用的编译器而异,但我很好奇执行vector>时的性能问题与vector*>,尤其是在C++中。具体来说:假设您的外部vector已满,您想要开始将元素插入到第一个内部vector中。如果外部vector只是存储指针,而不是存储整个内部vector,那么它将如何存储在内存中。是否必须移动整个外部vector以获得更多空间,或者移动内部vector(假设未预先分配空间),从而导致外部vector出现问题?谢谢 最佳答案 Vector在内部是一个指针,所以vector的指针有点矫枉过正。Vectorofpointersors

c++ - 这是在 C++ 中释放指针内存的正确方法吗

这是一个例子,我对它是否是释放指针分配内存的正确方法感到震惊char*functionTest(){char*a=newchar[10];returna;}intmain(){char*b;b=functionTest();delete[]b;return0;}这是一个非常初学者的问题,但仍然想消除我的疑问。从delete编辑到delete[]感谢@sharptooth。提前致谢。 最佳答案 技术上正确的C++(截至此时使用delete[]进行编辑)代码将编译并运行而不会出现错误。然而,在生产C++代码中,您将很少使用new[]和d